//package com.demo.minio.config;
//
//import com.demo.minio.until.FileNameUtils;
//import io.minio.MinioClient;
//import io.minio.ObjectStat;
//import io.minio.PutObjectOptions;
//import io.minio.messages.Bucket;
//import lombok.SneakyThrows;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.tomcat.util.http.fileupload.IOUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.annotation.PostConstruct;
//import javax.servlet.http.HttpServletResponse;
//import java.io.InputStream;
//import java.net.URLEncoder;
//import java.util.List;
//
///**
// * minin工具类
// */
//@Component
//@Slf4j
//public class MinioUtilsCopy {
//
//    @Autowired
//    private MinioConfig minIoProperties;
//
//    private static MinioClient minioClient;
//
//
//    /**
//     * 初始化minio配置
//     *
//     * @param :
//     * @return: void
//     * @date : 2020/8/16 20:56
//     */
//    @PostConstruct
//    public void init() {
//        try {
//            // 初始化客户端
//             minioClient =
//                    MinioClient.builder()
//                            // minio服务端地址URL
//                            .endpoint(minIoProperties.getUrl())
//                            // 用户名及密码（访问密钥/密钥）
//                            .credentials(minIoProperties.getAccessKey(), minIoProperties.getSecretKey())
//                            .build();
//
//            createBucket(minIoProperties.getBocket());
//        } catch (Exception e) {
//            e.printStackTrace();
//            log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
//        }
//    }
//
//    /**
//     * 判断 bucket是否存在
//     *
//     * @param bucketName:
//     *            桶名
//     * @return: boolean
//     * @date : 2020/8/16 20:53
//     */
//    @SneakyThrows(Exception.class)
//    public static boolean bucketExists(String bucketName) {
//        return minioClient.bucketExists(bucketName);
//    }
//
//    /**
//     * 创建 bucket
//     *
//     * @param bucketName:
//     *            桶名
//     * @return: void
//     * @date : 2020/8/16 20:53
//     */
//    @SneakyThrows(Exception.class)
//    public static void createBucket(String bucketName) {
//        boolean isExist = minioClient.bucketExists(bucketName);
//        if (!isExist) {
//            minioClient.makeBucket(bucketName);
//        }
//    }
//
//    /**
//     * 获取全部bucket
//     *
//     * @param :
//     * @return: java.util.List<io.minio.messages.Bucket>
//     * @date : 2020/8/16 23:28
//     */
//    @SneakyThrows(Exception.class)
//    public static List<Bucket> getAllBuckets() {
//        return minioClient.listBuckets();
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param bucketName:
//     *            桶名
//     * @param fileName:
//     *            文件名
//     * @param filePath:
//     *            文件路径
//     * @return: void
//     * @date : 2020/8/16 20:53
//     */
//    @SneakyThrows(Exception.class)
//    public static void upload(String bucketName, String fileName, String filePath) {
//        minioClient.putObject(bucketName, fileName, filePath, null);
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param bucketName:
//     *            桶名
//     * @param fileName:
//     *            文件名
//     * @param stream:
//     *            文件流
//     * @return: java.lang.String : 文件url地址
//     * @date : 2020/8/16 23:40
//     */
//    @SneakyThrows(Exception.class)
//    public static String upload(String bucketName, String fileName, InputStream stream) {
//        minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
//        return getFileUrl(bucketName, fileName);
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param bucketName:
//     *            桶名
//     * @param file:
//     *            文件
//     * @return: java.lang.String : 文件url地址
//     * @date : 2020/8/16 23:40
//     */
//    @SneakyThrows(Exception.class)
//    public static String upload(String bucketName, MultipartFile file) {
//
//        // 文件名
//        String fileName = "";
//        // 文件格式
//        String prefix = "";
//        // 服务器上文件的相对路径
//        String filePath = "";
//        // 上传成功标识
//        boolean flag = false;
//        // 获取文件前缀
//        int index= file.getOriginalFilename().indexOf(".")+1;
//        prefix = file.getOriginalFilename().substring(index);
//        fileName = FileNameUtils.getNextId(prefix);
//
//        final InputStream is = file.getInputStream();
//       // final String fileName = file.getOriginalFilename();
//      //  .putObject(suffix,filePath,inputStream,inputStream.available(),file.getContentType());
//        minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
//        is.close();
//        return getFileUrl(bucketName, fileName);
//    }
//
//    /**
//     * 删除文件
//     *
//     * @param bucketName:
//     *            桶名
//     * @param fileName:
//     *            文件名
//     * @return: void
//     * @date : 2020/8/16 20:53
//     */
//    @SneakyThrows(Exception.class)
//    public static void deleteFile(String bucketName, String fileName) {
//        minioClient.removeObject(bucketName, fileName);
//    }
//
//    /**
//     * 下载文件
//     *
//     * @param bucketName:
//     *            桶名
//     * @param fileName:
//     *            文件名
//     * @param response:
//     * @return: void
//     * @date : 2020/8/17 0:34
//     */
//    @SneakyThrows(Exception.class)
//    public static void download(String bucketName, String fileName, HttpServletResponse response) {
//        // 获取对象的元数据
//        final ObjectStat stat = minioClient.statObject(bucketName, fileName);
//        response.setContentType(stat.contentType());
//        response.setCharacterEncoding("UTF-8");
//        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//        InputStream is = minioClient.getObject(bucketName, fileName);
//        IOUtils.copy(is, response.getOutputStream());
//        is.close();
//    }
//
//    /**
//     * 获取minio文件的下载地址
//     *
//     * @param bucketName:
//     *            桶名
//     * @param fileName:
//     *            文件名
//     * @return: java.lang.String
//     * @date : 2020/8/16 22:07
//     */
//    @SneakyThrows(Exception.class)
//    public static String getFileUrl(String bucketName, String fileName) {
//        return minioClient.presignedGetObject(bucketName, fileName);
//    }
//
//
//}
